package com.lmf.containerInitializer;

import com.lmf.filter.UserFilter;
import com.lmf.listener.UserListener;
import com.lmf.servlet.UserServlet;

import javax.servlet.*;
import java.util.EnumSet;
import java.util.Set;

/**
 * 以编码的方式向ServletContext对象中注册web中的三大组件
 */
//创建servlet初始化容器的实现类：里面注册组件的方法都不止一种，都可以用来注册组件，这里只随机选用了其中一种
public class UserServletContainerInitializer implements ServletContainerInitializer {
    @Override
    public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
        System.out.println("servlet初始化容器。。。。。。。。。。。。。。。");
        //注册自定义的servlet组件（或者第三方jar包组件）
        ServletRegistration.Dynamic userServlet = servletContext.addServlet("userServlet", UserServlet.class);
            //配置servlet的拦截路径
        userServlet.addMapping("/user");
        ServletRegistration.Dynamic userServlet2 = servletContext.addServlet("userServlet2", new UserServlet());
        userServlet2.addMapping("/user2");
        //className:必须使用全类名，才有效
        ServletRegistration.Dynamic userServlet3 = servletContext.addServlet("userServlet3", "com.lmf.servlet.UserServlet");
        userServlet3.addMapping("/user3");

        //注册Listener组件
        servletContext.addListener(UserListener.class);
//        servletContext.addListener("com.lmf.listener.UserListener");

        //注册Filter组件
        FilterRegistration.Dynamic userFilter = servletContext.addFilter("userFilter", UserFilter.class);
        /**
         *  DispatcherType:枚举类，里面定义了filter拦截的请求类型
         *
         * addMappingForUrlPatterns方法中传入的第一个参数是EnumSet.of(DispatcherType.REQUEST)，
         *  表明我们写的UserFilter会拦截通过request方式发送过来的请求。
         */
        userFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
//        servletContext.addFilter("userFilter2","过滤器全类名");
//        servletContext.addFilter("userFilter3",new UserFilter());
    }
}
